package persistencia.dao;

import org.hibernate.Query;
import persistencia.hbt.HibernateUtil;
import bean.EntidadPersistente;
import bean.EntidadPersistenteConNombreUnico;

public class EntidadConNombreUnicoDAO extends EntidadPersistenteDAO {
	private static EntidadConNombreUnicoDAO instancia = null;
	
	public static EntidadConNombreUnicoDAO getInstancia(){
		if(instancia == null)
			instancia = new EntidadConNombreUnicoDAO();
		
		if (session == null)
			session = HibernateUtil.getSession();
		
		return instancia;
	}
	
	public EntidadPersistenteConNombreUnico buscar(EntidadPersistente entidad)
	{	
		if (entidad.getId() != null)
			return (EntidadPersistenteConNombreUnico) super.buscar(entidad);
		else {
			EntidadPersistenteConNombreUnico ent =  (EntidadPersistenteConNombreUnico)entidad;
			if (ent.getNombre() != null)
				return this.buscar(entidad.getClass().getName(),ent.getNombre());
		}
		
		return null;
	}
	
	private EntidadPersistenteConNombreUnico buscar(String className, String nombre){
		String queryString = "from " + className + " e where e.nombre = :var";
		Query query = session.createQuery(queryString);
		query.setString("var", nombre);
		EntidadPersistenteConNombreUnico ent = (EntidadPersistenteConNombreUnico) query.setFirstResult(0).setMaxResults(1).uniqueResult();
		return ent;
	}
}
